% The following is a list of subsections that will appear within this section 
% and a brief description:
\section{Agile Culture and Principles}
\label{agileSoftware}
\subsection{Agile Culture} 
\label{agileCulture}
% First it will be important to dicuss what it means to be agile.  Why is being
% agile important?  Breifly discuss the software culture associated with the Agile 
% software movement.  This information has been obtained from Agile books, 
% Extreme Programming books, and papers from Martin Fowler.
  
Agile software development was born from the unsuccessful use of plan-driven methodologies.  
The process that comes with a plan-driven approach can be seen as laborious.  Agile has
the ability to compromise between no process and too much process~\cite{newMethodology}.  
Before a project can become agile in nature, the culture of the group must be ready
for change.  

The culture of a software group that is ready to move towards agile should be disciplined.  
To be disciplined, the group must ensure that all the work is done without shortcuts~\cite{sustainable}.  
Many consider agile development to be undisciplined in nature.  Agile focuses on developing 
a working product, whereas a plan-driven approach will release detailed documentation before
having any useful work to show for it.  A disciplined team will also take
responsibility for their work.  A disciplined team member would not have a problem
standing up and saying something when issues exist in the code base or within the
team.  

Leadership is also an important part of a team willing to take a chance on using agile
software practices.  Leaders should be ``individuals who recognize that the
greatest success
is when they can help others succeed and give them the opportunity to receive the accolades they
deserve, who view success as a team accomplishment and failure as a personal responsibility, not an 
opportunity to apportion blames on others.''~\cite{sustainable}  A leader should also motivate members of the 
team to follow agile practices, even when the team may be unaccustomed to using these practices.  
Lastly, a typical agile leader is also responsible for keeping the team on track, with the goal of 
continually improving the process.  

In order for a team to move towards agile software practices, the team must be able to work together.  
Respect for each other and the project are key for the team to succeed~\cite{extremeExplained}.  
Within the team, no one is more important than any other team member.  Embracing a team's
differences in personalities and roles will allow the project to grow and become successful.  
Finally, a team will be able to work better together if the communication between members is done
face to face rather than over the phone or through email.  

\subsection{Agile Principles}
\label{agilePrinciples}
% Discuss principles associated with the Agile software movement.  These principles
% come once again from Agile books, Extreme Programming books, and the writings of
% Martin Fowler.  Also discuss the role of coach in such an environment.  Many 
% developers are not used to this method of development and by having a coach available,
% it is easier to adapt to this change.  Lastly, all these principles are the foundation 
% for the set of practices that are to follow.  Add keep the product simple to the list
% of principles rather than as part of the culture.  
Before exploring the agile practices that can be followed during the software development
lifecycle, a set of principles should be noted.  These principles outline the 
overall vision of the project.  Hence, the principles characterize what the project should
accomplish~\cite{sustainable}.  Once the principles are clearly stated, a set of practices
can be derived to meet the vision of the project at hand.  

The first principle is to stay agile throughout the life of the project.  In other
words, change should remain easy.  If the customer's needs are modified, the developers 
should not have to ``sweat it out.''  A set of practices will be in place that enhance the 
ability to change.  By keeping these practices available, the developers will 
benefit in the present and the future.  In addition, keeping the practices throughout
the life of the project will benefit the customer as well~\cite{extremeExplained}.  

The second principle to follow is to keep the project flow-oriented by maintaining a 
working product at all times.  The goal is to keep software in a state where
it can be shipped at any moment.  The product should not only be able to compile
but it should function as advertised~\cite{extremeExplained}.  Producing software
that works is more important than creating ceremonial documents that will lead 
to the development of the product.  This way, the customer/users will be able to 
give feedback based on the product in its current state~\cite{sustainable}.  

Another principle is emphasize improvement.  Through
design decisions made while the project is on-going, the product that is being
created can improve.  This significantly differs from traditional software development.  
Within a traditional software environment, all design decisions are made before any
code is written~\cite{sustainable}.  Emphasizing improvement results in creating 
product features that are 
only needed today, but also keeps the door open for future improvements to the product.  

The last principle could be the most important of the all: preventing defects.  
Defect detection is important, but preventing defects benefits both the team
and the customer.  Defects will corrode the trust that exists between the
customer and the project team~\cite{extremeExplained}.  Preventing defects is
done by following a variety of practices.  Such practices as automated unit testing,
continuous integration, paired programming and code reviews all can prevent 
defects.  Preventing defects from happening will save both the customer and
project team headaches later on.  